package demo.xlj.yuyi.studentapp.myView;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import demo.xlj.yuyi.studentapp.R;

/**
 * 作者：项路俊 on 2018/3/7 0007
 * 邮箱：ThanksForCode@gmail.com
 * 介绍：
 */

public class OverTextView extends View {


    private String text="ewfewfref";
    private List<Map<String, Integer>> mListPoint = new ArrayList<Map<String,Integer>>();

    Paint mPaint = new Paint();

    public OverTextView(Context context) {
        super(context);
    }

    public OverTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public OverTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        //换图区域，宽高自己设定，要圆要扁请随意
        RectF rectF = new RectF(0, 0, 800, 800);
        //这个功能的重要点 其实是先画一个轨迹 然后再把文字画到这个轨迹上 所以 想要什么样的扭曲，就画什么样的轨迹，下面就是画一个轨迹
        Path path = new Path();
        //画一个弧形 也可以是椭圆  上面的矩形就是这个图形的区域大小了 后面两个参数记住 一个是起始位置 一个是所画角度而不是终点位置
        path.addArc(rectF, -180, 180);
        mPaint.setColor(Color.RED);
        //去锯齿的 不多说
        mPaint.setAntiAlias(true);
        mPaint.setTextSize(20);
        mPaint.setColor(getResources().getColor(R.color.colorAccent));
        // 画布下移
//        canvas.translate(0, 100);
        // 绘制路径
        mPaint.setStyle(Paint.Style.STROKE);
//        canvas.drawPath(path, mPaint);

        // 下面就是绘制文本了
        mPaint.setStyle(Paint.Style.FILL);
        //把传进来的string转成char【】类型 下面要用到
        char[] chars = text.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            mPaint.setTextSize(20);
            char[] chars1 = new char[1];
            chars1[0] = chars[i];
            //下面就是一个字符一个字符的往后画了 根据自己的需求调整宽度 尺寸
            //这里说明一下参数，免得大家自己又要去看去猜去摸索 如果单纯的不需要文字逐渐变大或者啥的 只需要扭曲
            //那就直接用canvas.drawTextOnPath（）；把string path 往里面传就好了
            //然后下面的0 的位置是X的偏移 1是写Y轴的偏移 这个就可以让那个path是在文字下面 或者穿过中间 或者在下面了
            //差不多了 我很懒 只给个思路 毕竟大家拿过去都要自己改改的
            canvas.drawTextOnPath(chars1, 0, 1, path, i * (45 + i), 40 + i, mPaint);
        }

    }

    public void setText(String text){
        this.text = text;
        invalidate();
    }


}
